/*
 * @(#)RoleController.java v2.0 2016年11月22日
 * 百联集团	版权所有
 * 
 * 文件描述...
 *
 * @Title: RoleController.java 
 * @Package com.bailiangroup.gsp.oms.controller 
 * @author tylong
 * @date 2016年11月22日 下午11:35:41
 * @version v2.0
 * 历史版本：
 * 	1. 【2016年11月22日】 创建文件   by tylong
 */
package com.ess.web.controller.role;


import com.bailian.pagehelper.PageInfo;
import com.blgroup.b2b.common.constant.SysMessage;
import com.blgroup.b2b.common.entity.MessageResultInfo;
import com.blgroup.b2b.common.model.Role;
import com.blgroup.b2b.web.dto.AddRoleReqDto;
import com.blgroup.b2b.web.dto.DeleteRoleReqDto;
import com.blgroup.b2b.web.dto.QueryRoleReqDto;
import com.blgroup.b2b.web.dto.UpdateRoleReqDto;
import com.blgroup.b2b.web.service.sys.RoleService;
import com.blgroup.b2b.web.util.BeanUtils;
import com.blgroup.b2b.web.util.QueryLikeUtils;
import com.ess.web.controller.base.BaseController;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;

/** 
 * 角色Controller
 * 
 * @ClassName: RoleController 
 * @author tylong
 * @date 2016年11月22日 下午11:35:41
 * @version v2.0 
 *  
 */
@Controller
@RequestMapping(value = "/sys")
public class RoleController extends BaseController {

	/**
	 * 日志变量
	 */
	static final Logger logger = LoggerFactory.getLogger(RoleController.class);
	/**
	 * 角色service
	 */
	@Autowired
	RoleService roleService;
	/**
	 * 
	 * 方法描述：   删除角色
	 * 业务逻辑说明  ：删除角色 
	 * 1、根据唯一主键删除<br/>
	 * @Title: deleteRole 
	 * @date 2016年11月22日 下午8:31:28
	 * @author tylong
	 * @modifier 
	 * @modifydate 
	 * @param request
	 * @param response
	 * @param dto
	 * @return
	 */
	@RequiresPermissions("role:deleteRole")
	@RequestMapping(value = "/deleteRole", method = RequestMethod.POST)
	@ResponseBody
	public Object deleteRole(HttpServletRequest request, HttpServletResponse response, @RequestParam String sid) {
		MessageResultInfo resultInfo=new MessageResultInfo();
		DeleteRoleReqDto dto = new DeleteRoleReqDto();
		dto.setSid(sid);
		try {
			//删除角色
			resultInfo=roleService.deleteRole(dto);
		} catch (Exception e) {
			logger.error("删除角色失败", e);
			resultInfo.setResultCode(SysMessage.SYSTEM_FAILURE_CODE);
			resultInfo.setResultMsg("删除角色失败");
		}
		return resultInfo;
	}
	/**
	 * 
	 * 方法描述：   添加角色
	 * 业务逻辑说明  ：添加角色 
	 * 1、参数校验<br/>
	 * @Title: addRole 
	 * @date 2016年11月22日 下午8:32:18
	 * @author tylong
	 * @modifier 
	 * @modifydate 
	 * @param request
	 * @param response
	 * @param dto
	 * @return
	 */
	@RequiresPermissions("role:addRole")
	@RequestMapping(value = "/addRole", method = RequestMethod.POST)
	@ResponseBody
	public Object addRole(@Valid @ModelAttribute("dto") AddRoleReqDto dto, BindingResult bindingResult, Model model, HttpServletRequest request) {
		MessageResultInfo resultInfo=new MessageResultInfo();
		try {
			resultInfo=roleService.addRole(dto);
		} catch (Exception e) {
			logger.error("新增角色失败", e);
			resultInfo.setResultCode(SysMessage.SYSTEM_FAILURE_CODE);
			resultInfo.setResultMsg("新增角色失败");
		}
		return resultInfo;
	}
	/**
	 * 
	 * 方法描述：   更新角色
	 * 业务逻辑说明  ：更新角色
	 * 1、参数校验<br/>
	 * 2、字典值不可更改<br/>
	 * @Title: updateRole 
	 * @date 2016年11月22日 下午8:33:19
	 * @author tylong
	 * @modifier 
	 * @modifydate 
	 * @param request
	 * @param response
	 * @param dto
	 * @return
	 */
	@RequiresPermissions("role:updateRole")
	@RequestMapping(value = "/updateRole", method = RequestMethod.POST)
	@ResponseBody
	public Object updateRole(@Valid @ModelAttribute("dto") UpdateRoleReqDto dto, HttpServletRequest request, HttpServletResponse response) {
		MessageResultInfo resultInfo=new MessageResultInfo();
		try {
			resultInfo=roleService.updateRole(dto);
		} catch (Exception e) {
			logger.error("更新角色失败", e);
			resultInfo.setResultCode(SysMessage.SYSTEM_FAILURE_CODE);
			resultInfo.setResultMsg("更新角色失败");
		}
		return resultInfo;
	}

	/**
	 * 
	 * 方法描述：   查询角色列表
	 * 业务逻辑说明  ：查询角色列表 
	 * @Title: queryRole 
	 * @date 2016年12月2日 下午6:04:48
	 * @author tylong
	 * @modifier 
	 * @modifydate 
	 * @param model
	 * @param dto
	 * @param result
	 * @param request
	 * @return
	 */
	@RequiresPermissions("role:queryRole")
	@RequestMapping(value="/queryRole", method=RequestMethod.GET)
	public ModelAndView queryRole(@Valid @ModelAttribute("dto") QueryRoleReqDto dto, BindingResult bindingResult, Model model, HttpServletRequest request) {

		ModelAndView mv = new ModelAndView("sys/roleList");
		try {
			
			if(StringUtils.isEmpty(dto.getOrderBy())){
				dto.setOrderBy("UPDATE_DATE desc");
			}
			BeanUtils.convertEmptyStringToNull(dto);
			//角色名称模糊查询添加 %
			if(null != dto.getRoleName()){
				dto.setRoleName(QueryLikeUtils.beforeQuery(dto.getRoleName()));
			}
			PageInfo<Role> pageInfo = roleService.queryRole(dto);
			model.addAttribute(pageInfo);
			model.addAttribute("tabId", "queryRole");
			//角色名称模糊查询  去除% 用于数据回显
			if(null != dto.getRoleName()){
				dto.setRoleName(QueryLikeUtils.afterQuery(dto.getRoleName()));
			}
		} catch (Exception e) {
			logger.error(e.getMessage());
		}
		return mv;
	}
	
	/**
	 * 
	 * 方法描述：   方法总结
	 * 业务逻辑说明  ：TODO(总结性的归纳方法业务逻辑) 
	 * 1、处理……跳转新增角色页面……<br/>
	 * @Title: toAddUser 
	 * @date 2016年12月12日 下午5:29:26
	 * @author Limaoming
	 */
	@RequiresPermissions("role:addRole")
	@RequestMapping(value="/toAddRole",method=RequestMethod.GET)
	public ModelAndView toAddUser(HttpServletRequest request) {
		//跳转新增页面
		ModelAndView  mv=new ModelAndView("sys/roleAdd");
		mv.addObject("tabId", "addRole");
		return mv;
	}
	/**
	 * 方法描述：   方法总结
	 * 业务逻辑说明  ：TODO(总结性的归纳方法业务逻辑) 
	 * 1、处理……跳转角色修改页面……<br/>
	 * 2、处理…………<br/>
	 * 3、处理…………<br/>
	 * @Title: toUpdateUser 
	 * @date 2016年12月19日 上午10:22:12
	 * @author Limaoming
	 * @modifier 
	 * @modifydate 
	 * @param request
	 * @return
	 */
	@RequiresPermissions("role:updateRole")
	@RequestMapping(value="/toUpdateRole",method=RequestMethod.GET)
	public ModelAndView toUpdateUser(@RequestParam String roleSid, HttpServletRequest request) {
		ModelAndView  mv=new ModelAndView("sys/roleUpdate");
		
		try {
			//查询角色信息
			QueryRoleReqDto roleDto = new QueryRoleReqDto();
			roleDto.setIsPage("0");
			roleDto.setSid(roleSid);
			BeanUtils.convertEmptyStringToNull(roleDto);
			PageInfo<Role> rolepageInfo = roleService.queryRole(roleDto);
			if (null != rolepageInfo && null != rolepageInfo.getList()) {
				mv.addObject("dto", rolepageInfo.getList().get(0));
			}
		} catch (Exception e) {
			logger.error(e.getMessage());
		}
		
		mv.addObject("tabId", "updateRole");
		return mv;
	}
}
